package com.edu.spring.ioc.factory;

import com.edu.spring.ioc.bean.Car;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;

/**
 * 自定义工厂类，用于制造对象。
 * 场景：如果制造某些对象比较复杂时，可以使用工厂类来制造对象。
 */
@Component
public class BYDFactory implements FactoryBean<Car> {

    /**
     * 调用此方法给容器中制造对象，此处返回的对象是容器中管理的对象。
     *
     * @return
     * @throws Exception
     */
    @Override
    public Car getObject() throws Exception {
        System.out.println("BYDFactory.getObject()");
        return new Car();
    }

    /**
     * 返回对象的类型，此处返回的对象类型要和getObject()方法中制造出来的对象类型一致。
     * 若此处不指定，则默认是getObject()方法的返回值类型。
     * 若此处指定了，则容器会用这个指定的类型去创建对象。
     * 此处可以不指定，因为getObject()方法已经返回了对象类型。
     *
     * @return
     */
    @Override
    public Class<?> getObjectType() {
        return Car.class;
//        return null;
    }

    @Override
    public boolean isSingleton() {
        return FactoryBean.super.isSingleton();
    }
}
